const jwt = require('jsonwebtoken')
const { JWT_SECRET } = require('../config/config.default')
const { tokenExpiredError, invalidToken } = require('../constant/err.type')

/**
 * token认证
 */
async function auth (ctx, next) {
    // 获取token
    const { ['x-token']: token } = ctx.request.header
    try {
        // 校验token
        const res = jwt.verify(token, JWT_SECRET)
        ctx.state.token = res
    } catch (error) {
        switch (error.name) {
            case 'TokenExpiredError':
                console.error('token已过期', error)
                ctx.app.emit('error', tokenExpiredError, ctx)
                return
            case 'JsonWebTokenError':
                console.error('无效token', error)
                ctx.app.emit('error', invalidToken, ctx)
                return
        }
        return
    }
    await next()
}

module.exports = {
    auth
}